package com.eastfair.config.api;

import com.eastfair.config.dto.AttachmentDTO;
import com.eastfair.config.entity.*;
import com.eastfair.config.vo.AttachmentVO;
import com.eastfair.core.base.R;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * Date:2021/11/30
 * Time:9:44
 *
 * @author zjn
 */
@FeignClient(value = "config")
public interface ConfigServiceFeign {

    /**
     * 获取第三方账号列表
     *
     * @param interfaceAccount 第三方账号列表过滤条件
     * @return
     */
    @PostMapping("/interfaceAccount/getList")
    @ApiOperation(value = "获取第三方账号列表", notes = "获取第三方账号列表")
    R<List<InterfaceAccount>> getList(@RequestBody(required = false) InterfaceAccount interfaceAccount);

    /**
     * 根据条件获取单个第三方账号
     * 必填参数：
     * platformType 平台类型
     *
     * @param interfaceAccount 第三方账号过滤条件
     * @return 第三方账号实体
     */
    @PostMapping("/interfaceAccount/getByEntity")
    @ApiOperation(value = "根据条件获取单个第三方账号", notes = "根据条件获取单个第三方账号")
    R<InterfaceAccount> getByEntity(@RequestBody InterfaceAccount interfaceAccount);

    /**
     * 获取商贸对接地点列表
     *
     * @param appointmentPlace 商贸对接地点列表过滤条件
     * @return
     */
    @PostMapping("/appointmentPlace/getList")
    @ApiOperation(value = "获取商贸对接地点列表", notes = "获取商贸对接地点列表")
    R<List<AppointmentPlace>> getList(@RequestBody(required = false) AppointmentPlace appointmentPlace);

    /**
     * 根据条件获取单个商贸对接地点
     * 必填参数：
     * code 编码
     *
     * @param appointmentPlace 商贸对接地点过滤条件
     * @return 商贸对接地点实体
     */
    @PostMapping("/appointmentPlace/getByEntity")
    @ApiOperation(value = "根据条件获取单个商贸对接地点", notes = "根据条件获取单个商贸对接地点")
    R<AppointmentPlace> getByEntity(@RequestBody AppointmentPlace appointmentPlace);

    /**
     * 批量新增附件
     *
     * @param attachmentDTOList 附件列表
     * @return 是否新增成功
     */
    @PostMapping("/attachment/saveAttachmentList")
    R<Boolean> saveAttachmentList(@RequestBody List<AttachmentDTO> attachmentDTOList);

    /**
     * 批量删除业务附件
     *
     * @param attachmentDTO 业务类型、业务id
     * @return 是否删除成功
     */
    @PostMapping("/attachment/deleteByBusiness")
    R<Boolean> deleteByBusiness(@RequestBody AttachmentDTO attachmentDTO);

    /**
     * 根据业务id与业务类型批量删除原附件后批量新增附件
     *
     * @param attachmentDTOList 新附件列表
     * @return 是否操作成功
     */
    @PostMapping("/attachment/deleteAndSaveAttachmentList")
    R<Boolean> deleteAndSaveAttachmentList(@RequestBody List<AttachmentDTO> attachmentDTOList);

    /**
     * 根据业务id与业务类型查询附件
     *
     * @param attachmentDTO 查询条件
     * @return 附件列表
     */
    @PostMapping("/attachment/getAttachmentListByBusiness")
    R<List<AttachmentVO>> getAttachmentListByBusiness(@RequestBody AttachmentDTO attachmentDTO);

    /**
     * 根据条件获取单个问卷配置
     * 必填参数：
     * exhibitionId 展会id
     * questionnaireType 问卷类型
     * languageType 语言环境
     *
     * @param questionnaireConfig 问卷配置过滤条件
     * @return 问卷配置实体
     */
    @PostMapping("/config/questionnaireConfig/getByEntity")
    @ApiOperation(value = "根据条件获取单个问卷配置", notes = "根据条件获取单个问卷配置")
    R<QuestionnaireConfig> getByEntity(@RequestBody QuestionnaireConfig questionnaireConfig);

    /**
     * 根据条件获取单个消息模板（默认查询启用状态）
     * 必填参数：
     * type 类型
     * languageType 语言环境
     * 选填参数：
     * isEnable 是否启用
     *
     * @param messageTemplate 消息模板过滤条件
     * @return 消息模板实体
     */
    @PostMapping("/messageTemplate/getByEntity")
    @ApiOperation(value = "根据条件获取单个消息模板", notes = "根据条件获取单个消息模板")
    R<MessageTemplate> getByEntity(@RequestBody MessageTemplate messageTemplate);
}

